

package com.oa.common.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 分页工具类
 *
 * @author admin
 */
public class PageUtils implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 * 总记录数
	 */
	private int totalCount;
	/**
	 * 每页记录数
	 */
	private int pageSize;
	/**
	 * 总页数
	 */
	private int totalPage;
	/**
	 * 当前页数
	 */
	private int currPage;
	/**
	 * 列表数据
	 */
	private List<?> list;

	/**
	 * 分页
	 * @param list        列表数据
	 * @param totalCount  总记录数
	 * @param pageSize    每页记录数
	 * @param currPage    当前页数
	 */
	public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
		this.list = list;
		this.totalCount = totalCount;
		this.pageSize = pageSize;
		this.currPage = currPage;
		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
	}

	/**
	 * 分页
	 */
	public PageUtils(IPage<?> page) {
		this.list = page.getRecords();
		this.totalCount = (int)page.getTotal();
		this.pageSize = (int)page.getSize();
		this.currPage = (int)page.getCurrent();
		this.totalPage = (int)page.getPages();
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrPage() {
		return currPage;
	}

	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}

	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}


	/**
	 * 专门list集合转成分页的方法
	 *
	 * @param list
	 * @param pageNum  页码
	 * @param pageSize 每页多少条数据
	 * @return
	 */
	public static Map startListPage(List list, Integer pageNum, Integer pageSize) {
		Map<String, Object> map = new HashMap<>();
		Integer count = 0;
		Integer pageCount = 0; //页数
		if(list == null){
			map.put("totalCount",count);
			map.put("pageSize",pageSize);
			map.put("pageNum",pageNum);
			map.put("pageCount",pageCount);
			map.put("list",null);
			return map;
		}
		if(list.size() == 0){
			map.put("totalCount",count);
			map.put("pageSize",pageSize);
			map.put("pageNum",pageNum);
			map.put("pageCount",pageCount);
			map.put("list",null);
			return map;
		}
		count = list.size(); //记录总数
		map.put("totalCount",count);
		map.put("pageSize",pageSize);
		map.put("pageNum",pageNum);
		if (count % pageSize == 0) {
			pageCount = count / pageSize;
		} else {
			pageCount = count / pageSize + 1;
		}
		map.put("pageCount",pageCount);
		int fromIndex = 0; //开始索引
		int toIndex = 0; //结束索引

		if(pageNum > pageCount){
			pageNum = pageCount;
		}
		if (!pageNum.equals(pageCount)) {
			fromIndex = (pageNum - 1) * pageSize;
			toIndex = fromIndex + pageSize;
		} else {
			fromIndex = (pageNum - 1) * pageSize;
			toIndex = count;
		}

		List pageList = list.subList(fromIndex, toIndex);
		map.put("list",pageList);
		return map;
	}

}
